草庐IT

CountDownLatch和ExecutorService 线程池cachedThreadPool.submit

全部标签

java - 在 Swing 应用程序中应该从哪个线程调用 System.exit()?

在Swing应用程序中,可以从任何线程调用System.exit()吗?(例如在美国东部时间?) 最佳答案 如果可以的话,您不应该调用System.exit()。退出java进程最好的方法就是让所有线程正常退出。这将终止VM。在您的主JFrame中,您应该setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)。然后可以调用frame.dispose()关闭JFrame并退出EDT。 关于java-在Swing应用程序中应该从哪个线程调用System.

Java 垃圾回收线程优先级

我在面试中被问到以下问题:“垃圾收集线程的默认优先级是多少?”我知道我们不能强制GC或更改其优先级,但我从未听说过它的默认优先级。有人知道吗? 最佳答案 可能面试官正在寻找的答案是GC处于低优先级的后台进程。这样做的原因是运行GC是昂贵的,但它不是(通常)关键进程,所以它应该只在系统有时间做而不是中断关键任务时进行。(实时系统中也存在类似的想法——将不重要的进程放在后台任务中,将所有关键进程放在前台——所有这些都将比后台任务具有更高的优先级。)话虽如此,如果您阅读Sun有关垃圾收集的文献,就会发现仅将GC作为低优先级线程运行是完全不

java - 运行外部进程的非阻塞线程

我创建了一个JavaGUI应用程序,它作为许多低级外部进程的包装器。该实用程序按原样运行,但迫切需要一项重大改进。我希望我的外部进程以非阻塞方式运行,这将允许我并行处理其他请求。简而言之,我希望能够在生成数据时处理来自外部进程的数据。但看起来我检查外部进程是否仍在运行的基本尝试正在阻塞。下面是我的ExternalProcess类的摘录。有关线程和阻塞的特定Java功能问题,请参阅内联评论。publicvoidExecute(){System.out.println("Startingthread...\n");Runner=newThread(this,"ExternalProcess

java - 在 Java 并行/多线程中创建现有代码

我有一个非常简单的爬虫。我想让我当前的代码在几个线程中运行。你能给我一些教程或文章来帮助我完成这个测试吗?我最初是一名.Net开发人员,在.Net中,我在多线程中运行代码没有任何问题,但不幸的是,我对Java中的线程一无所知。我的爬虫是一个命令行软件,所以不用担心GUI。提前谢谢你。 最佳答案 Java通过Thread类来实现多线程。使现有代码成为多线程的最常见方法之一是使用Runnable接口(interface)定义您希望在线程启动时调用的内容,然后启动它。publicclassSomeFunctions{publicstati

java - 如果我从我的同步方法调用非同步方法是非同步方法线程安全的吗?

我从我的同步方法中调用了noonsynchronized方法,它是线程安全的吗?我有如下两种方法:publicclassMyClass{voidsynchronizeddoSomething1(){doSomething2();}voiddoSomething2(){//willthisblockofcodebesynchronizedifcalledonlyfromdoSomething1??}} 最佳答案 如果doSomething2()仅从doSomething1()调用,则它只会被单个线程调用用于的单个实例我的类(class

java - 你如何使用事件调度线程?

我了解到swing不是线程安全的。深入研究,我发现对swing组件的每次修改都必须在事件调度线程上完成,以防止与多线程相关的各种问题。然而,信息似乎就此止步了。似乎没有很好的教程来解释如何在Internet上的任何地方执行此操作。将发布的代码中与其他问题相关的信息拼凑在一起,似乎我必须在我的程序中的每个swing修改周围放置一个不整洁的代码块(就像我自己代码中的这个例子):try{SwingUtilities.invokeAndWait(newRunnable(){publicvoidrun(){setTitle("Frametitle");setDefaultCloseOperati

java - 在自己的线程中运行的 Spring Bean

在我的Web应用程序中,我尝试使用JavaSDK7WatchService创建一个目录轮询bean。我想要实现的是在它自己的线程中运行这个bean,这样它就不会阻塞应用程序。像这样的东西: 最佳答案 恐怕您将不得不使用Spring手动创建此线程:WatchServiceRunnableWrapper很简单:publicclassWatchServiceRunnableWrapperimplementsRunnable{privateWatchServiceWatchService;publicWatchServiceRunnable

java - 线程安全 - 传递给线程的最终局部方法变量?

如果此方法的变量“commonSet”改为类级字段,以下代码是否会导致同样的问题。如果它是一个类级别的字段,我将不得不在一个同步块(synchronizedblock)中将添加到集合操作包装起来,因为HashSet不是线程安全的。我是否应该在下面的代码中做同样的事情,因为多个线程正在添加到集合中,甚至当前线程可能会继续改变集合。publicvoidthreadCreatorFunction(finalString[]args){finalSetcommonSet=newHashSet();finalRunnablerunnable=newRunnable(){@Overridepubl

java - 是否可以从堆转储中的 hprof 转储/线程查看线程

我有一个大的(5GB)hprof转储,它是在OutOfMemoryError发生时由应用程序创建的。(使用XX:HeapDumpOnOutOfMemoryError)。不幸的是,发生此错误时没有收集日志。重新创建它需要几个小时。我希望是否有一些工具可以显示来自hprof的异常堆栈跟踪或所有线程堆栈等。我目前正在使用MAT,看不到获取线程信息的方法。我可以使用哪个工具?(不知道hprof文件有没有OOM时线程/调用位置的信息)(我确实知道在正常情况下如何进行线程转储。这里的问题是事件已经发生,我只有hprof转储。) 最佳答案 回答自

Java 线程池 - 线程正在更新吗?

我的Java.NIO套接字服务器中有一个线程池。我有时会收到运行时错误,例如Connectionresetbypeer或BrokenPipe等。我的问题是:抛出异常时线程是否被杀死?如果是-是否在线程池中创建了一个新线程来代替被杀死的线程??这是我的线程管理器:importjava.nio.channels.SocketChannel;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;publicclassThreadsManager{privateExecutorServic